package Client.PokerClient.src;

import javax.swing.DefaultListModel;
/**
 * Klasa kontrolujaca operacjami robionymi w lobby.
 * @author Artur Smolibowski
 */
public class ServerController {
  /**
   * Referencja do klasy glownej.
   */
  private Client client;
  /**
   * Lista zawierajaca dostepen gry na serwerze.
   */
  private DefaultListModel<String> ServerDatabase;
  /**
   * Tablica Id dostepnych gier.
   */
  private String[] ID_GAME_LIST;
  /**
   * Konstruktor klasy.
   * @param client Referencja do klasy dlownej.
   */
  public ServerController(Client client) {
    ServerDatabase = new DefaultListModel<String>();

    this.client=client;
  }
  /**
   * Zapytanie od servera podajace liste wszystkich gier.
   * @param ID_GAME_LIST Tablica id dostepnych gier.
   * @param ServerDatabase Lista w ktorej przechowywane sa wszystki gry.
   */
  public void S_REFRESH(String[] ID_GAME_LIST, DefaultListModel<String> ServerDatabase) {
    this.ID_GAME_LIST=ID_GAME_LIST;
    this.ServerDatabase = ServerDatabase;
    client.getServerWindow().getServerList().setModel(this.ServerDatabase);
  }
  /**
   * Zapytanie do serwera ktore tworzy nowa gre na serwerze.
   * @param maxPlayers Maksymalna liczba graczy.
   * @param numberOfBot Liczba botow.
   * @param HostPlay Czy host gra.
   */
  public void S_NEWGAME(int maxPlayers, int numberOfBot, int HostPlay) {
    boolean ifHostPlay;

	if(HostPlay==0)
	  ifHostPlay=false;
    else
      ifHostPlay=true;

    client.CreateGame(HostPlay+numberOfBot, numberOfBot, maxPlayers, true, ifHostPlay);
    client.getGameThread().getClientSTaskController().S_NEWGAME(maxPlayers, numberOfBot, HostPlay);
  }
  /**
   * Zapytanie do serwera sluzace do dolaczenie do gry.
   * @param index Pozycja id gry do ktorej chcemy dolaczy w tablicy.
   * @param info Informacje o grze do ktorej chcemy dolaczyc.
   */
  public void S_JOIN(int index, String info) {
    info=info.substring(info.indexOf(":")+1);
    info=info.substring(info.indexOf(":")+2);
    int actualNumberOfPlayers=Integer.parseInt(info.substring(0,info.indexOf("/")));
    info=info.substring(info.indexOf("/")+1);
    int maxPlayers=Integer.parseInt(info.substring(0,info.indexOf(" ")));
    info=info.substring(info.indexOf(":")+2);
    int numberOfBot;
    try{ numberOfBot=Integer.parseInt(info.substring(0,info.indexOf(" "))); }
    catch(StringIndexOutOfBoundsException e) { numberOfBot=Integer.parseInt(info); }

    client.CreateGame(actualNumberOfPlayers+1, numberOfBot, maxPlayers, false, true);
    client.getGameThread().getClientSTaskController().S_JOIN(ID_GAME_LIST[index]);
  }
  /**
   * Pobranie listy zawierajacej wszsytki dostepne gry.
   * @return Liste zawierajacej wszsytki dostepne gry.
   */
  public DefaultListModel<String> getServerDatabase() {
    return ServerDatabase;
  }
  /**
   * Pobranie tablicy id wyszystkich dostepnych gier.
   * @return Tablicy id wyszystkich dostepnych gier.
   */
  public String[] getID_GAME_LIST() {
    return ID_GAME_LIST;
  }
}
